package com.gp8.tier3;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

public class ServiceTroisiemeTier {
	
	private static ServiceGestionPiaffeurImpl gestionPiaffeurService;
	
	public static void main(String [] args) throws Exception {
		Registry registry;
		ServiceGestionPiaffeur gestionPiaffeurServiceStub;
		String nomFich = "save.ser";
		
		/*---------------------------------------------------------------------------------------------
		 * Récupération des serialisation précédentes dans le fichier du nom de "save.ser".
		 * Le serveur est informé de la réussite ou non de la récupération des données.
		*/
		try {
			FileInputStream fichier = new FileInputStream(nomFich);
			ObjectInputStream in = new ObjectInputStream(fichier);

			gestionPiaffeurService = (ServiceGestionPiaffeurImpl) in.readObject();
			
			fichier.close();
			in.close();

			System.out.println(" $$$ Restauration du fichier " + nomFich + " realisee");
		} catch (Exception e) {
			//appel aux constructeurs du service
			gestionPiaffeurService = new ServiceGestionPiaffeurImpl();
			System.out.println(" *** Start : Pbs de Restauration / fichier " + nomFich);
		}
		//----------------------------------------------------------------------------------------------

		//enregistrement des objets
		gestionPiaffeurServiceStub = (ServiceGestionPiaffeur) UnicastRemoteObject.exportObject(gestionPiaffeurService, 0);

		//création du registry
		registry = LocateRegistry.createRegistry(2000);  

		//enregistrement des objets dans le registry
		registry.bind("gestionPiaffeurServiceStub", gestionPiaffeurServiceStub);

		System.out.println("Service 'tier 3' enregistre");

		Thread t = new Thread(gestionPiaffeurService);
		t.start();	
	}
	
	public static void Save() {
		/*---------------------------------------------------------------------------------------------
		 * Sériaisation dans le fichier du nom de "save.ser".
		 * Le serveur est informé de la réussite ou non de la sauvegarde des données.
		*/
		
		try {
			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("save.ser"));
			out.writeObject(gestionPiaffeurService);
			out.close();
			System.out.println(" $$$ Sauvegarde dans le fichier " + "save.ser" + " realisee");
		} catch (Exception e) {
			System.out.println(" *** Start :Pbs de Sauvegarde dans le fichier " + "save.ser");
			e.printStackTrace();
		}
	}
	
}
